<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>typeof</title>
</head>
<body>

<script>
    //封装typeof方法
    // typeof([]) -- array
    // typeof({}) -- object
    // typeof(function) -- function ()
    // typeof(new Number()) -- number object
    // typeof (123) --number

//    1.分类 原始值 引用值
//    2.区分引用值

    function type(target) {
        var template = {
            "[object Array]" : "array",
            "[object Object]" : "object",
            "[object Number]" : "number - object",
            "[object Boolean]" : "boolean - object",
            "[object String]" : "string - object"
        };
        if (target === null){
            return 'null';
        }
        // if (typeof (target) == "function"){//可以简化的，在原始值哪里就可以返回了
        //     return 'function';
        // }
        else if (typeof (target) == "object"){//引用值
        //    数组
        //    对象
        //    包装类 Object.prototype.toString
            var str = Object.prototype.toString.call(target);
            return template[str];
        }else {//原始值
            return typeof (target);
        }
    }





</script>

</body>
</html>
